package com.min.juc.unsafe;

import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;

public class ListTest {
    public static void main(String[] args) {
        // ArrayList 在并发操作的情况下会有ConcurrentModificationException错误
        //List<String> list = new ArrayList<>();

        //解决方法一 利用Vector类型来解决
        //List<String> list = new Vector<>();

        //解决方法二 利用Collections.synchronizedList将list变成支持同步的
        //List<String> list = Collections.synchronizedList(new ArrayList<>());

        //解决方法三 JUC中,使用CopyOnWriteArrayList 来解决
        //CopyOnWrite 写入时复制,在写入的时候避免覆盖,造成数据问题
        //CopyOnWriteArrayList 比 Vector的效率要高
        List<String> list = new CopyOnWriteArrayList<>();
        for (int i = 0; i < 10; i++) {
            new Thread(()->{
                list.add(UUID.randomUUID().toString().substring(1,6));
                System.out.println(Thread.currentThread().getName() + ":" + list);
            },String.valueOf(i)).start();
        }

        System.out.println(Thread.currentThread().getName() + ":" + list);


    }
}
